//package com.xxl.job.executor;
//
//import org.springframework.boot.SpringApplication;
//import org.springframework.boot.autoconfigure.SpringBootApplication;
//import org.springframework.boot.builder.SpringApplicationBuilder;
//import org.springframework.context.ConfigurableApplicationContext;
//import org.springframework.stereotype.Component;
//
//import javax.swing.*;
//import javax.swing.text.*;
//import java.awt.*;
//import java.io.ByteArrayOutputStream;
//import java.io.IOException;
//import java.io.OutputStream;
//import java.io.PrintStream;
//import java.awt.event.WindowAdapter;
//import java.awt.event.WindowEvent;
//
//@SpringBootApplication
//public class XxlJobExecutorApplication {
//
//    private static ConfigurableApplicationContext context;
//
//    public static void main(String[] args) {
//        // 启动Spring Boot应用，允许图形界面
//        context = new SpringApplicationBuilder(XxlJobExecutorApplication.class)
//                .headless(false)
//                .run(args);
//
//        // 在Swing事件调度线程中启动UI
//        SwingUtilities.invokeLater(() -> {
//            MainFrame mainFrame = context.getBean(MainFrame.class);
//            mainFrame.setVisible(true);
//        });
//    }
//
//    @Component
//    public static class MainFrame extends JFrame {
//        private JTextPane logTextPane;
//        private JScrollPane scrollPane;
//        private JButton clearButton;
//
//        public MainFrame() {
//            initializeUI();
//            redirectSystemOutAndErr();
//        }
//
//        private void initializeUI() {
//            setTitle("系统管理窗口 - 带日志显示");
//            setSize(800, 600);
//            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//            setLocationRelativeTo(null); // 居中显示
//
//            // 创建主面板，使用边界布局
//            JPanel mainPanel = new JPanel(new BorderLayout());
//
//            // 创建日志显示区域
//            logTextPane = new JTextPane();
//            logTextPane.setEditable(false);
//            logTextPane.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
//            // 设置样式
//            StyledDocument doc = logTextPane.getStyledDocument();
//            Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
//
//            // 添加滚动面板
//            scrollPane = new JScrollPane(logTextPane);
//            scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
//
//            // 创建按钮面板
//            JPanel buttonPanel = new JPanel();
//            clearButton = new JButton("清空日志");
//            clearButton.addActionListener(e -> clearLog());
//
//            buttonPanel.add(clearButton);
//
//            // 添加组件到主面板
//            mainPanel.add(scrollPane, BorderLayout.CENTER);
//            mainPanel.add(buttonPanel, BorderLayout.SOUTH);
//
//            // 添加主面板到窗口
//            getContentPane().add(mainPanel);
//
//            // 添加窗口关闭监听器
//            addWindowListener(new WindowAdapter() {
//                @Override
//                public void windowClosing(WindowEvent e) {
//                    // 关闭Spring上下文
//                    SpringApplication.exit(context, () -> 0);
//                    System.exit(0);
//                }
//            });
//        }
//
//        private void redirectSystemOutAndErr() {
//            // 重定向System.out
//            OutputStream out = new ByteArrayOutputStream() {
//                @Override
//                public void flush() throws IOException {
//                    super.flush();
//                    String text = toString();
//                    if (!text.isEmpty()) {
//                        appendToLog(text, Color.BLACK);
//                        reset();
//                    }
//                }
//            };
//
//            // 重定向System.err
//            OutputStream err = new ByteArrayOutputStream() {
//                @Override
//                public void flush() throws IOException {
//                    super.flush();
//                    String text = toString();
//                    if (!text.isEmpty()) {
//                        appendToLog(text, Color.RED);
//                        reset();
//                    }
//                }
//            };
//
//            System.setOut(new PrintStream(out, true));
//            System.setErr(new PrintStream(err, true));
//
//            // 测试日志输出
//            System.out.println("系统启动成功，日志系统已初始化");
//            System.err.println("这是一条错误日志示例");
//        }
//
//        private void appendToLog(String text, Color color) {
//            // 确保在Swing事件线程中更新UI
//            SwingUtilities.invokeLater(() -> {
//                try {
//                    StyledDocument doc = logTextPane.getStyledDocument();
//                    Style style = logTextPane.addStyle("logStyle", null);
//                    StyleConstants.setForeground(style, color);
//
//                    doc.insertString(doc.getLength(), text, style);
//
//                    // 自动滚动到底部
//                    logTextPane.setCaretPosition(doc.getLength());
//                } catch (BadLocationException e) {
//                    e.printStackTrace();
//                }
//            });
//        }
//
//        private void clearLog() {
//            SwingUtilities.invokeLater(() -> {
//                try {
//                    StyledDocument doc = logTextPane.getStyledDocument();
//                    doc.remove(0, doc.getLength());
//                } catch (BadLocationException e) {
//                    e.printStackTrace();
//                }
//            });
//        }
//    }
//}
